﻿<cfscript>
/** 
* Course Mark Translater Service
* 
* @hint "Course Mark Translater Service" 
*/ 

component 
	displayname="public.service.util.markAdvice" 
	output=false 
	{
	
	/**
	* @hint "初始化对象"
	*/
	public public.service.util.markAdvice function init() output=false {
		return this;
	}

	/**
	* @hint "计算课程绩点"
	* 
	* @markMode "计分模式"
	* @credit "课程学分"
	* @mark "正考成绩"
	* @markResit "补考成绩"
	* @markLimit "补考成绩上限"
	*/
	public numeric function getMarkCredit( required string markMode, required numeric credit, required numeric mark, required numeric markResit, required numeric markLimit ) output=false {
		
			/* 取正考和补考的最大值 */
		/*
			var markMax = max( arguments.mark, min(arguments.markResit, arguments.markLimit) );
			
			if ( markMax gte 60 ) {
				
				if ( arguments.markMode eq "2" ) {
					markMax = 100;
				}
	
				return (1 + (markMax-60)/10) * arguments.credit;
			}
			else {
				return 0;
			}
		*/
		
		if ( arguments.markMode eq "5" ) { 
			writeDump('1');
			abort;//老数据， 不应该计算，防止错误信息
		}
		
		var markMax = max( arguments.mark, arguments.markResit);
		
		
		if ( markMax gte 60 ) {
			
			/*百分制*/
			if ( arguments.markMode eq "0" ) {
					if( markMax lt 60){
						return 0;	 //不及格  对应二级制不合格
					}else if( markMax lte 64){
						return 1.0;//及格  对应二级制合格
					}else if( markMax lte 69){
						return 1.7;
					}else if( markMax lte 74){
						return 2.2;//中
					}else if( markMax lte 79){
						return 2.7;
					}else if( markMax lte 84){
						return 3.2;//良
					}else if( markMax lte 89){
						return 3.6;
					}else if( markMax lte 94){
						return 3.8; //优
					}else{
						return 4.0;
					}
			}
			/*五级制*/
			if ( arguments.markMode eq "4" ) {
					if ( markMax eq 95 ) {
						return 3.8; //优
					}
					else if ( markMax eq 85 ) {
						return 3.2; //良
					}
					else if ( markMax eq 75 ) {
						return 2.2; //中
					}
					else if ( markMax eq 65 ) {
						return 1.0; //及格
					}
					else if ( markMax eq 0 ) {
						return 0;  //不及格
					}
			}
			
			/*二级制*/
			if ( arguments.markMode eq "2" ) {
					if ( markMax eq 60 ) {
						return 1.0; //合格
					}
					else if ( markMax eq 0 ) {
						return 0;  //不合格
					}
			}
		 }
		 else {
			 return 0;
		 }
		
		
		
	}
	
	/**
	* @hint "计算课程最终成绩"
	* 
	* @markMode "计分模式"
	* @mark "正考成绩"
	* @markNote "成绩备注"
	* @markResit "补考成绩"
	* @markResitNote "补考成绩备注"
	* @markLimit "补考成绩上限"
	*/
	public string function getMarkResult( required string markMode, required numeric mark, required string markNote, required numeric markResit, required string markResitNote, required numeric markLimit ) output=false {

		/* 取正考和补考的最大值 */
		var scroll = max( arguments.mark,arguments.markResit );
		
		if ( arguments.markMode eq "5" ) { //老系统数据
			writeDump('1');
			abort;//老数据， 不应该计算，防止错误信息
		 }

		if ( scroll gte 0 ) {

			/* 百分制 */
			if ( arguments.markMode eq "0" ) {
				if ( scroll gte 0 ) {
					return numberFormat(scroll, "_._");
				}
			}

			/* 两级制 */
			if ( arguments.markMode eq "2" ) {
				/* 兼容性转换 */
				if ( scroll gte 60 ) {
					return "合格";
				}
				else if ( scroll gte 0 and scroll lt 60 ) {
					return "不合格";
				}
			}

			/* 五级制 */
			if ( arguments.markMode eq "4" ) {
				if ( scroll gte 90 and scroll lte 100 ) {
					return "优";
				}
				else if ( scroll gte 80 and scroll lt 90 ) {
					return "良";
				}
				else if ( scroll gte 70 and scroll lt 80 ) {
					return "中";
				}
				else if ( scroll gte 60 and scroll lt 70 ) {
					return "及格";
				}
				else if ( scroll gte 0 and scroll lt 60 ) {
					return "不及格";
				}
			}

		}
		else {
			
			/* 如果最终成绩不再 0-100 之间 则属于特殊情况 */
			if ( arguments.markNote eq "2" or arguments.markResitNote eq "2" ) {
				return "缺考";
			}
			
			if ( arguments.markNote eq "3" or arguments.markResitNote eq "3" ) {
				return "缓考";
			}
			
			if ( arguments.markNote eq "9" or arguments.markResitNote eq "9" ) {
				return "违纪";
			}

		}
		
		return "";
	}

	/**
	* @hint "显示补考成绩"
	* 
	* @markMode "计分模式"
	* @mark "补考成绩"
	* @markNote "补考成绩备注"
	* @markLimit "补考成绩上限"
	*/
	public string function getMarkResit( required string markMode, required numeric mark, required string markNote, required numeric markLimit ) output=false {
		
		if ( arguments.markMode eq "5" ) { //老系统数据
			writeDump('1');
			abort;//老数据， 不应该计算，防止错误信息
		 }
		 
		//var scroll = min(arguments.mark, arguments.markLimit);
		var scroll = arguments.mark;
		
		/* 排查备注 */
		switch ( arguments.markNote ) {
			
			case "1":
			
				/* 正常备注 则根据计分模式显示成绩摘要 */
				
				/* 百分制 */
				if ( arguments.markMode eq "0" ) {
					if ( scroll gte 0 ) {
						return numberFormat(scroll, "_._");
					}
				}
				
				/* 两级制 */
				if ( arguments.markMode eq "2" ) {
					
					/* 兼容性转换 */
					if ( scroll gte 60 ) {
						return "合格";
					}
					else if ( scroll gte 0 and scroll lt 60 ) {
						return "不合格";
					}
					
				}
				
				/* 五级制 */
				if ( arguments.markMode eq "4" ) {
					if ( scroll gte 90 and scroll lte 100 ) {
						return "优";
					}
					else if ( scroll gte 80 and scroll lt 90 ) {
						return "良";
					}
					else if ( scroll gte 70 and scroll lt 80 ) {
						return "中";
					}
					else if ( scroll gte 60 and scroll lt 70 ) {
						return "及格";
					}
					else if ( scroll gte 0 and scroll lt 60 ) {
						return "不及格";
					}
				}
				 
				break;
				
			case "2": 
				return "缺考";
			case "3": 
				return "缓考";
			case "4": 
				return "免修";
			case "9": 
				return "违纪";
			
		}

		return "";
		
	}
	
	/**
	* @hint "显示正考成绩"
	* 
	* @markMode "计分模式"
	* @mark "正考成绩"
	* @markNote "成绩备注"
	*/
	public string function getMark( required string markMode, required numeric mark, required string markNote ) output=false {
		
		
		if ( arguments.markMode eq "5" ) { //老系统数据
			writeDump('1');
			abort;//老数据， 不应该计算，防止错误信息
		 }
		/* 排查备注 */
		switch ( arguments.markNote ) {
			
			case "1":
			
				/* 正常备注 则根据计分模式显示成绩摘要 */
				
				/* 百分制 */
				if ( arguments.markMode eq "0" ) {
					if ( arguments.mark gte 0 ) {
						return numberFormat(arguments.mark, "_._");
					}
				}
				
				/* 两级制 */
				if ( arguments.markMode eq "2" ) {
					
					/* 兼容性转换 */
					if ( arguments.mark gte 60 ) {
						return "合格";
					}
					else if ( arguments.mark gte 0 and arguments.mark lt 60 ) {
						return "不合格";
					}
					
				}
				
				/* 五级制 */
				if ( arguments.markMode eq "4" ) {
					
					if ( arguments.mark gte 90 and arguments.mark lte 100 ) {
						return "优";
					}
					else if ( arguments.mark gte 80 and arguments.mark lt 90 ) {
						return "良";
					}
					else if ( arguments.mark gte 70 and arguments.mark lt 80 ) {
						return "中";
					}
					else if ( arguments.mark gte 60 and arguments.mark lt 70 ) {
						return "及格";
					}
					else if ( arguments.mark gte 0 and arguments.mark lt 60 ) {
						return "不及格";
					}
				}
				 
				break;
				
			case "2": 
				return "缺考";
			case "3": 
				return "缓考";
			case "4": 
				return "免修";
			case "9": 
				return "违纪";
			
		}

		return "";
	}
	
}
	
</cfscript>